#coding=utf-8
'''
Created on 2015年5月28日
'''
from common_base.errors import AliveError


class NotImplementedException(Exception):
    '''
    防御性异常, 保证需要重写的方法必需被重写
    '''

class UFOException(Exception):
    '''
    异常类
    '''


    def __init__(self, code, message=None, **kwargs):
        '''
        Constructor
        '''

        self.code = code
        # self.message = TTCError.get_message(code) if message is None else message
        self.message = message
        self.ext = kwargs
        
class ParamException(UFOException):
    '''
    UFOException的一个特例
    '''
    
    def __init__(self, name, **kwargs):
        '''
        '''
        
        UFOException.__init__(self, AliveError.ERROR_COMMON_REQUEST_PARAM_INVALID, **kwargs)
        
        self.message = name
        
class UnhandledException(Exception):
    '''
    未处理异常, 此类异常需要记录日志, 如DBException, RongyunException
    在上层捕获该异常后需要记录日志后再转化为UFOException
    '''
    
    def __init__(self, code, ext=None, *args, **kwargs):
        '''
        '''
        
        Exception.__init__(self, *args, **kwargs)
        self.code = code
        self.ext = {} if ext is None else ext

class DBException(UnhandledException):
    '''
    数据库异常
    '''
    
    def __init__(self, *args, **kwargs):
        '''
        '''
        
        code = AliveError.ERROR_COMMON_DATABASE_EXCEPTION
        UnhandledException.__init__(self, code, None, *args, **kwargs)
        
        
class UFOServiceException(UnhandledException):
    '''
    调用其他模块时产生的异常, 例如调用pilot时的异常
    '''
    
    def __init__(self, *args, **kwargs):
        '''
        '''
        code = AliveError.ERROR_COMMON_CALL_UFO_SERVICE_FAILED
        UnhandledException.__init__(self, code, None, *args, **kwargs)
        
